/**
 * 创建节点
 * @param {*} param0
 */
export function createElement(vm, tag, data, ...children) {
  if (!data) {
    data = {};
  }
  let key = data.key;
  if (key) {
    delete data.key;
  }
  return vNode(vm, tag, data, key, children, undefined);
}
/**
 * 文本节点
 * @param {*} text
 */
export function createNodeText(vm, text) {
  return vNode(vm, undefined, undefined, undefined, undefined, text);
}
/**
 * 虚拟节点
 */
// ast跟虚拟dom的区别：ast是对代码的抽象语法树（描述语言本身的比如js，css，htmll），虚拟dom是对dom的抽象（描述dom元素，可以增加额外的属性）
function vNode(vm, tag, data, key, children, text) {
  return {
    vm,
    tag,
    data,
    key,
    children,
    text,
  };
}
